package com.smartdio.mindtrain.images;

import java.io.File;
import java.io.FileFilter;
import java.io.FilenameFilter;
import java.util.Vector;

import com.smartdio.mindtrain.Mind;


/**
 * 管理或者动态建立图片的对象
 * 
 * @author smart
 * 
 */
public class ImageMan {

	/**
	 * 图片库的缓存，每个Vector项就是一个图片的相对地址，相对于图片库的文件夹路径 与图片库的文件夹路径加在一起就是完整的图片路径
	 */
	private Vector images = null;

	/**
	 * 
	 */
	public ImageMan() {
		super();
		loadImages();
	}

	/**
	 * 从图片文件夹中装载图片名称，连同子文件夹一起扫描。
	 */
	public void loadImages() {
		
		//用线程装载图片。不过要注意另外的操作，例如建立训练或者绘画图片也要用线程，否则会产生错误
		Thread t = new Thread(new LoadImages());

		t.start();
		// TODO
	}

	/**
	 * @return the images
	 */
	public Vector getImages() {
		if (images == null) {
			loadImages();
		}
		return images;
	}

	/**
	 * 装载指定文件夹内的图片。
	 * 
	 * @param dir
	 * @param sub
	 *            如果是true，说明这是一个子文件夹，获得的文件名会包括子文件夹的名称
	 */
	protected void loadDirImages(File dir, boolean sub) {
		String[] files = dir.list(new FilenameFilter() {

			/*
			 * (non-Javadoc)
			 * 
			 * @see java.io.FilenameFilter#accept(java.io.File,
			 *      java.lang.String)
			 */
			@Override
			public boolean accept(File dir, String name) {
			
				name = name.substring(name.lastIndexOf('.')+1, name.length());
				if (name.equalsIgnoreCase("png")
						|| name.equalsIgnoreCase("jpg")
						|| name.equalsIgnoreCase("jpeg"))
					return true;
				else
					return false;
			}

		});

		for (int i = 0; i < files.length; i++) {
			String name = files[i];
			if (sub) {
				name = dir.getName() + File.separator + name;
			}
			images.add(name);
			//System.out.println(name);
		}
	}

	/**
	 * 获取指定序号的图片相对路径
	 * 
	 * @param index
	 * @return
	 */
	public String getImage(int index) {
		System.out.println("index:" + index + ",and size is"
				+ getImages().size());
		return (String) getImages().get(index);
	}

	/**
	 * 获取图片库中图片的数量
	 * 
	 * @return
	 */
	public int getImageCount() {
		return getImages().size();
	}
	
	private class LoadImages implements Runnable{

		/* (non-Javadoc)
		 * @see java.lang.Runnable#run()
		 */
		@Override
		public void run() {
			images = new Vector();
			File imgDir = new File(Mind.getImagePath());

			loadDirImages(imgDir, false);

			File[] subs = imgDir.listFiles(new FileFilter() {

				/*
				 * (non-Javadoc)
				 * 
				 * @see java.io.FileFilter#accept(java.io.File)
				 */
				@Override
				public boolean accept(File file) {
					// TODO Auto-generated method stub
					return file.isDirectory();
				}

			});

			for (int i = 0; i < subs.length; i++) {
				loadDirImages(subs[i], true);
			}
			
		}
		
	}

}
